package com.duguang.baseanimation.ui.customview.milaucher; import java.util.ArrayList; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.os.Handler; import android.os.Vibrator; import android.view.View; import android.view.View.OnLongClickListener; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.animation.TranslateAnimation; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.duguang.baseanimation.R; import com.duguang.baseanimation.ui.base.BaseActivity; import com.duguang.baseanimation.ui.customview.milaucher.utils.Configure; import com.duguang.baseanimation.ui.customview.milaucher.utils.DateAdapter; import com.duguang.baseanimation.ui.customview.milaucher.utils.DragGrid; import com.duguang.baseanimation.ui.customview.milaucher.utils.ScrollLayout; public class MiLaucherMainActivity extends BaseActivity { /** GridView. */ private LinearLayout linear; private RelativeLayout relate; private DragGrid gridView; private ScrollLayout lst_views; TextView tv_page;// int oldPage=1; private ImageView runImage, delImage; LinearLayout.LayoutParams param; TranslateAnimation left, right; Animation up, down; public static final int PAGE_SIZE = 8; ArrayList<DragGrid> gridviews = new ArrayList<DragGrid>(); ArrayList<ArrayList<String>> lists = new ArrayList<ArrayList<String>>();// 全部数据的集合集lists.size()==countpage; ArrayList<String> lstDate = new ArrayList<String>();// 每一页的数据 SensorManager sm; SensorEventListener lsn; boolean isClean = false; Vibrator vibrator; int rockCount = 0; @Override public void setView() { setContentView(R.layout.activity_custom_mi_laucher_main); for (int i = 0; i < 22; i++) { lstDate.add("" + i); } } @Override public void initView() { relate = (RelativeLayout) findViewById(R.id.relate); lst_views = (ScrollLayout) findViewById(R.id.views); tv_page = (TextView) findViewById(R.id.tv_page); tv_page.setText("1"); Configure.init(MiLaucherMainActivity.this); param = new LinearLayout.LayoutParams( android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.FILL_PARENT); param.rightMargin = 100; param.leftMargin = 20; if (gridView != null) { lst_views.removeAllViews(); } initData(); for (int i = 0; i < Configure.countPages; i++) { lst_views.addView(addGridView(i)); } lst_views.setPageListener(new ScrollLayout.PageListener() { @Override public void page(int page) { setCurPage(page); } }); runImage = (ImageView) findViewById(R.id.run_image); runAnimation(); delImage = (ImageView) findViewById(R.id.dels); relate.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { // TODO Auto-generated method stub System.out.println("LongClick"); return false; } }); vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE); Sensor sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); lsn = new SensorEventListener() { public void onSensorChanged(SensorEvent e) { if (e.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { if (!isClean && rockCount >= 10) { isClean = true; rockCount = 0; vibrator.vibrate(100); CleanItems(); return; } float newX = e.values[SensorManager.DATA_X]; float newY = e.values[SensorManager.DATA_Y]; float newZ = e.values[SensorManager.DATA_Z]; // if ((newX >= 18 || newY >= 20||newZ >= 20 )&&rockCount<4) // { if ((newX >= 18 || newY >= 20 || newZ >= 20) && rockCount % 2 == 0) { rockCount++; return; } if ((newX <= -18 || newY <= -20 || newZ <= -20) && rockCount % 2 == 1) { rockCount++; return; } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } }; sm.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME); } @Override public void setListener() { // TODO Auto-generated method stub } public void initData() { Configure.countPages = (int) Math.ceil(lstDate.size() / (float) PAGE_SIZE); lists = new ArrayList<ArrayList<String>>(); for (int i = 0; i < Configure.countPages; i++) { lists.add(new ArrayList<String>()); for (int j = PAGE_SIZE * i; j < (PAGE_SIZE * (i + 1) > lstDate .size() ? lstDate.size() : PAGE_SIZE * (i + 1)); j++) lists.get(i).add(lstDate.get(j)); } boolean isLast = true; for (int i = lists.get(Configure.countPages - 1).size(); i < PAGE_SIZE; i++) { if (isLast) { lists.get(Configure.countPages - 1).add(null); isLast = false; } else lists.get(Configure.countPages - 1).add("none"); } } public void CleanItems() { lstDate = new ArrayList<String>(); for (int i = 0; i < lists.size(); i++) { for (int j = 0; j < lists.get(i).size(); j++) { if (lists.get(i).get(j) != null && !lists.get(i).get(j).equals("none")) { lstDate.add(lists.get(i).get(j).toString()); System.out.println("-->" + lists.get(i).get(j).toString()); } } } System.out.println(lstDate.size()); initData(); lst_views.removeAllViews(); gridviews = new ArrayList<DragGrid>(); for (int i = 0; i < Configure.countPages; i++) { lst_views.addView(addGridView(i)); } isClean = false; lst_views.snapToScreen(0); } public int getFristNonePosition(ArrayList<String> array) { for (int i = 0; i < array.size(); i++) { if (array.get(i) != null && array.get(i).toString().equals("none")) { return i; } } return -1; } public int getFristNullPosition(ArrayList<String> array) { for (int i = 0; i < array.size(); i++) { if (array.get(i) == null) { return i; } } return -1; } public LinearLayout addGridView(int i) { // if (lists.get(i).size() < PAGE_SIZE) // lists.get(i).add(null); linear = new LinearLayout(MiLaucherMainActivity.this); gridView = new DragGrid(MiLaucherMainActivity.this); gridView.setAdapter(new DateAdapter(MiLaucherMainActivity.this, lists .get(i))); gridView.setNumColumns(2); gridView.setHorizontalSpacing(0); gridView.setVerticalSpacing(0); final int ii = i; gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2, long arg3) { // TODO Auto-generated method stub if (lists.get(ii).get(arg2) == null) { new AlertDialog.Builder(MiLaucherMainActivity.this) .setTitle("添加") .setItems(R.array.items, new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dialog, int which) { // TODO Auto-generated method stub final String[] arrayAddItems = getResources() .getStringArray( R.array.items); // array lists.get(ii).add(arg2, arrayAddItems[which]); lists.get(ii).remove(arg2 + 1); if (getFristNonePosition(lists .get(ii)) > 0 && getFristNullPosition(lists .get(ii)) < 0) { lists.get(ii) .set(getFristNonePosition(lists .get(ii)), null); } if (getFristNonePosition(lists .get(ii)) < 0 && getFristNullPosition(lists .get(ii)) < 0) { System.out.println("==="); if (ii == Configure.countPages - 1 || (getFristNullPosition(lists.get(lists .size() - 1)) < 0 && getFristNonePosition(lists.get(lists .size() - 1)) < 0)) { lists.add(new ArrayList<String>()); lists.get(lists.size() - 1) .add(null); for (int i = 1; i < PAGE_SIZE; i++) lists.get( lists.size() - 1) .add("none"); lst_views .addView(addGridView(Configure.countPages)); Configure.countPages++; } else if (getFristNonePosition(lists .get(lists.size() - 1)) > 0 && getFristNullPosition(lists.get(lists .size() - 1)) < 0) { lists.get(lists.size() - 1) .set(getFristNonePosition(lists .get(lists .size() - 1)), null); ((DateAdapter) ((gridviews .get(lists.size() - 1)) .getAdapter())) .notifyDataSetChanged(); } } /* * if(lists.get(Configure.countPages- * 1)!=null * &&lists.get(Configure.countPages * -1).size()>0 && * lists.get(Configure * .countPages-1). * get(lists.get(Configure * .countPages-1).size()-1)!=null){ * lists * .get(Configure.countPages-1). * add(null); ((DateAdapter) * ((gridviews * .get(Configure.countPages * -1)).getAdapter * ())).notifyDataSetChanged(); } */ ((DateAdapter) ((gridviews.get(ii)) .getAdapter())) .notifyDataSetChanged(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dialog, int which) { // TODO Auto-generated method stub dialog.dismiss(); } }).show(); } } }); gridView.setSelector(R.anim.mi_laucher_grid_light); gridView.setPageListener(new DragGrid.G_PageListener() { @Override public void page(int cases, int page) { switch (cases) { case 0:// 滑动页面 lst_views.snapToScreen(page); setCurPage(page); new Handler().postDelayed(new Runnable() { @Override public void run() { Configure.isChangingPage = false; } }, 800); break; case 1:// 删除按钮上来 delImage.setBackgroundResource(R.drawable.mi_laucher_del); delImage.setVisibility(0); delImage.startAnimation(up); break; case 2:// 删除按钮变深 delImage.setBackgroundResource(R.drawable.mi_laucher_del_check); Configure.isDelDark = true; break; case 3:// 删除按钮变淡 delImage.setBackgroundResource(R.drawable.mi_laucher_del); Configure.isDelDark = false; break; case 4:// 删除按钮下去 delImage.startAnimation(down); break; case 5:// 松手动作 delImage.startAnimation(down); // Configure.isDelRunning = false; lists.get(Configure.curentPage).add(Configure.removeItem, null); lists.get(Configure.curentPage).remove( Configure.removeItem + 1); ((DateAdapter) ((gridviews.get(Configure.curentPage)) .getAdapter())).notifyDataSetChanged(); break; } } }); gridView.setOnItemChangeListener(new DragGrid.G_ItemChangeListener() { @Override public void change(int from, int to, int count) { String toString = (String) lists.get( Configure.curentPage - count).get(from); lists.get(Configure.curentPage - count).add(from, (String) lists.get(Configure.curentPage).get(to)); lists.get(Configure.curentPage - count).remove(from + 1); lists.get(Configure.curentPage).add(to, toString); lists.get(Configure.curentPage).remove(to + 1); ((DateAdapter) ((gridviews.get(Configure.curentPage - count)) .getAdapter())).notifyDataSetChanged(); ((DateAdapter) ((gridviews.get(Configure.curentPage)) .getAdapter())).notifyDataSetChanged(); } }); gridviews.add(gridView); linear.addView(gridviews.get(i), param); return linear; } public void runAnimation() { down = AnimationUtils.loadAnimation(MiLaucherMainActivity.this, R.anim.mi_laucher_del_down); up = AnimationUtils.loadAnimation(MiLaucherMainActivity.this, R.anim.mi_laucher_del_up); down.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation arg0) { // TODO Auto-generated method stub delImage.setVisibility(8); } }); right = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0f, Animation.RELATIVE_TO_PARENT, -1f, Animation.RELATIVE_TO_PARENT, 0f, Animation.RELATIVE_TO_PARENT, 0f); left = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -1f, Animation.RELATIVE_TO_PARENT, 0f, Animation.RELATIVE_TO_PARENT, 0f, Animation.RELATIVE_TO_PARENT, 0f); right.setDuration(25000); left.setDuration(25000); right.setFillAfter(true); left.setFillAfter(true); right.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { // TODO Auto-generated method stub runImage.startAnimation(left); } }); left.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { // TODO Auto-generated method stub runImage.startAnimation(right); } }); runImage.startAnimation(right); } public void setCurPage(final int page) { Animation a = AnimationUtils.loadAnimation(MiLaucherMainActivity.this, R.anim.mi_laucher_scale_in); a.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { // TODO Auto-generated method stub tv_page.setText((page + 1) + ""); tv_page.startAnimation(AnimationUtils .loadAnimation(MiLaucherMainActivity.this, R.anim.mi_laucher_scale_out)); } }); tv_page.startAnimation(a); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); sm.unregisterListener(lsn); } }